1. Field of the Invention
The present invention pertains to operating systems. More particularly, this invention relates to implementations of a 32-bit operating system which supports 16-bit code.
2. Background
Modern computer systems are typically made up of several different components, each performing a different function. These components include both a processor for executing instructions and a system memory which stores instructions to be executed by the processor as well as data manipulated by the processor when executing these instructions. The majority of modern processors trace their origins to an architecture referred to as "x86", older versions of which could access memory locations up to 1 megabyte (referred to as an address space of 1 megabyte). A software program written to use memory locations only up to 1 megabyte uses 16 bits for addressing and thus is typically referred to as "16-bit" code. Using 16 bits for addressing provides an address space of 65,536 bytes (64k bytes), thus, multiple "segments" of 64k bytes are used to access the full 1 megabyte.
More recently, processors have expanded to access more memory locations and execute 32- and 64-bit code. For example, many commercially available "x86" compatible processors execute 32-bit code, providing access to multiple segments of four gigabytes each, and typically up to 64 terabytes in all. However, a large amount of 16-bit code remains in existence. Although it is typically beneficial for a processor to execute 32-bit code, there are situations where it is desirable or necessary to use pre-existing 16-bit code. By way of example, many programs are written in 16-bit code so that they can be executed by, and thus sold to owners of, older or less-complex computer systems which only support 16-bit code. One example of such programs are device drivers, used to control access to specific hardware devices. However, rather than providing both 16-bit and 32-bit versions of the programs, it would be beneficial to provide a way to execute 32-bit code which can interact with 16-bit code, thereby allowing newer or more-complex computer systems to use the programs as well.
One solution to this problem is referred to as a "DOS extender". A DOS extender is an additional application that is executed by DOS and acts as an interface between 32-bit applications and the 16-bit DOS. However, typically all communications between the 32-bit applications and 16-bit DOS are required to pass through the DOS extender--no direct communication between the 32-bit applications and 16-bit DOS is typically allowed. Additionally, a DOS extender is an application being executed by the computer system in addition to DOS, and thus increases memory and long-term storage space requirements of the device on which it is executed.
Additionally, the term "computer system" encompasses a wide range of modem computing devices, including conventional desktop PCs as well as less-complex systems. Many such less-complex systems are limited in the amount of memory they include, often in an effort to reduce costs. However, many modern operating systems use a large amount of memory and require a large amount of storage space. Thus, it would be beneficial to provide a relatively small operating system which could be used in such less-complex systems.
Thus, a need exists for an improved 32-bit operating system.